﻿using System.Collections.Generic;

using System.Reflection;
using ClickLand.CorporacionPlaza.Comunes.Entidades;
using ClickLand.CorporacionPlaza.Comunes.Recursos;
using ClickLand.CorporacionPlaza.LogicaNegocio.Contratos;
using ClickLand.CorporacionPlaza.LogicaNegocio.Implementacion.ComandosCliente;
using Logger;


namespace ClickLand.CorporacionPlaza.LogicaNegocio.Fabricas
{
    /// <summary> Clase que fabrica los comandos que tienen que ver con clientes </summary>
    public class FabricaComandosCliente
    {

        /// <summary> Metodo que obtiene una instancia de un comando que agrega o inserta un cliente </summary>
        /// <param name="cliente">datos del cliente a insertar o modificar</param>
        /// <returns>Comando que agrega o inserta</returns>
        public static IComando<bool> ObtenerComandoAgregarEditar(Cliente cliente)
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            var retorno = new AgregarEditar(cliente);
            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
        }


        /// <summary> Metodo que obtiene una instancia de un comando que consulta un cliente dados unos parametros </summary>
        /// <param name="parametros">datos del cliente a insertar o modificar</param>
        /// <returns>Comando que agrega o inserta</returns>
        public static IComando<List<Cliente>> ConsultarCliente(Cliente parametros)
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            var retorno = new Consultar(parametros);
            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
        }

        public static IComando<Cliente> ObtenerComandoConsultarId(long id)
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            var retorno = new ConsultarId(id);
            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
        }
    }
}
